Hibernate CRUD Operations

Java Technologies - হাইবারনেট (Hibernate)
161
161

Hibernate একটি শক্তিশালী Object-Relational Mapping (ORM) ফ্রেমওয়ার্ক যা Java অ্যাপ্লিকেশন এবং রিলেশনাল ডেটাবেসের মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। Hibernate ডেটাবেসে CRUD (Create, Read, Update, Delete) অপারেশনগুলির মাধ্যমে ডেটা ম্যানিপুলেট করতে সাহায্য করে। এখানে Hibernate CRUD Operations কিভাবে কাজ করে তা বিস্তারিতভাবে আলোচনা করা হয়েছে।


1. Hibernate - Create Operation (Insert)

Create অপারেশন ডেটাবেসে নতুন রেকর্ড তৈরি করার জন্য ব্যবহৃত হয়। Hibernate এ নতুন অবজেক্ট তৈরি করা হলে, এটি ডেটাবেসে সেভ (insert) করার জন্য Session.save() বা Session.persist() মেথড ব্যবহার করা হয়।

Example: Create Operation (Insert)

ধরা যাক আমাদের একটি Employee ক্লাস রয়েছে, এবং আমরা এটিকে ডেটাবেসে সেভ করতে চাই।

Employee Class

@Entity
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String position;

    // Constructors, Getters, and Setters
}

Insert Operation

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class CreateEmployee {
    public static void main(String[] args) {
        // Step 1: Create SessionFactory
        SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
                .addAnnotatedClass(Employee.class)
                .buildSessionFactory();

        // Step 2: Create session
        Session session = factory.getCurrentSession();

        try {
            // Step 3: Create Employee object
            Employee newEmployee = new Employee("John", "Developer");

            // Step 4: Start a transaction
            session.beginTransaction();

            // Step 5: Save the employee object
            session.save(newEmployee);

            // Step 6: Commit the transaction
            session.getTransaction().commit();
            System.out.println("Employee saved with ID: " + newEmployee.getId());
        } finally {
            factory.close();
        }
    }
}

এখানে session.save() ব্যবহার করা হয়েছে Employee অবজেক্ট ডেটাবেসে সেভ করার জন্য। যখন ট্রানজ্যাকশন কমিট হয়, তখন ডেটাবেসে নতুন রেকর্ড তৈরি হয়।


2. Hibernate - Read Operation (Select)

Read অপারেশন ডেটাবেস থেকে তথ্য রিট্রিভ করার জন্য ব্যবহৃত হয়। Hibernate-এ ডেটা রিড করার জন্য Session.get() বা Session.load() মেথড ব্যবহার করা যায়। HQL (Hibernate Query Language) বা Criteria API ব্যবহার করে জটিল কোয়েরিও তৈরি করা যেতে পারে।

Example: Read Operation (Select)

ধরা যাক আমরা Employee টেবিল থেকে একটি Employee তথ্য রিট্রিভ করতে চাই।

Get Employee by ID

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class ReadEmployee {
    public static void main(String[] args) {
        // Step 1: Create SessionFactory
        SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
                .addAnnotatedClass(Employee.class)
                .buildSessionFactory();

        // Step 2: Create session
        Session session = factory.getCurrentSession();

        try {
            // Step 3: Start a transaction
            session.beginTransaction();

            // Step 4: Retrieve Employee based on the ID
            Employee employee = session.get(Employee.class, 1);

            // Step 5: Commit the transaction
            session.getTransaction().commit();

            System.out.println("Retrieved Employee: " + employee);

        } finally {
            factory.close();
        }
    }
}

এখানে session.get(Employee.class, 1) ব্যবহার করে ID = 1 এর Employee রেকর্ড ডেটাবেস থেকে রিট্রিভ করা হচ্ছে।


3. Hibernate - Update Operation

Update অপারেশন ডেটাবেসে বিদ্যমান রেকর্ড আপডেট করতে ব্যবহৃত হয়। Hibernate-এ একটি অবজেক্টের properties পরিবর্তন করলে, Session.update() বা session.saveOrUpdate() মেথড ব্যবহার করে ডেটাবেসে সেই পরিবর্তনটি সেভ করা যায়।

Example: Update Operation

ধরা যাক আমরা Employee টেবিলের একটি রেকর্ড আপডেট করতে চাই।

Update Employee

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class UpdateEmployee {
    public static void main(String[] args) {
        // Step 1: Create SessionFactory
        SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
                .addAnnotatedClass(Employee.class)
                .buildSessionFactory();

        // Step 2: Create session
        Session session = factory.getCurrentSession();

        try {
            // Step 3: Start a transaction
            session.beginTransaction();

            // Step 4: Get employee with ID 1
            Employee employee = session.get(Employee.class, 1);
            employee.setPosition("Senior Developer");

            // Step 5: Commit the transaction
            session.getTransaction().commit();
            System.out.println("Employee updated: " + employee);

        } finally {
            factory.close();
        }
    }
}

এখানে, session.get(Employee.class, 1) ব্যবহার করে ID = 1 এর Employee রেকর্ডটি পাওয়া হয়েছে এবং তার position আপডেট করা হয়েছে। তারপর session.getTransaction().commit() এর মাধ্যমে পরিবর্তনগুলি ডেটাবেসে সেভ করা হয়েছে।


4. Hibernate - Delete Operation

Delete অপারেশন ডেটাবেস থেকে কোনো রেকর্ড মুছে ফেলতে ব্যবহৃত হয়। Hibernate-এ ডেটাবেস থেকে রেকর্ড মুছে ফেলতে session.delete() মেথড ব্যবহার করা হয়।

Example: Delete Operation

ধরা যাক আমরা Employee টেবিল থেকে একটি রেকর্ড মুছে ফেলতে চাই।

Delete Employee

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class DeleteEmployee {
    public static void main(String[] args) {
        // Step 1: Create SessionFactory
        SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
                .addAnnotatedClass(Employee.class)
                .buildSessionFactory();

        // Step 2: Create session
        Session session = factory.getCurrentSession();

        try {
            // Step 3: Start a transaction
            session.beginTransaction();

            // Step 4: Get the employee by id
            Employee employee = session.get(Employee.class, 1);

            // Step 5: Delete the employee
            session.delete(employee);

            // Step 6: Commit the transaction
            session.getTransaction().commit();
            System.out.println("Employee deleted: " + employee);

        } finally {
            factory.close();
        }
    }
}

এখানে, session.delete(employee) ব্যবহার করে ID = 1 এর Employee রেকর্ডটি ডেটাবেস থেকে মুছে ফেলা হয়েছে।


Hibernate CRUD Operations - Best Practices

  1. Session Management: প্রতিটি ট্রানজ্যাকশনের জন্য নতুন Session তৈরি করুন এবং এটি close করুন, যাতে আপনার অ্যাপ্লিকেশন ভালভাবে কার্যকরী থাকে এবং মেমরি লিক না হয়।
  2. Transaction Management: সব CRUD অপারেশনকে একটি transaction এর মধ্যে রাখতে ভুলবেন না। এতে ডেটাবেসের ACID গুণাবলী বজায় থাকে।
  3. Batch Processing: বড় পরিমাণ ডেটা ইন্সার্ট বা আপডেট করার সময় batch processing ব্যবহার করুন। এতে পারফরম্যান্স বৃদ্ধি পায়।
  4. Use HQL for Complex Queries: ডেটাবেসে জটিল প্রশ্ন বা অপারেশন সম্পাদন করার জন্য Hibernate Query Language (HQL) ব্যবহার করুন। এটি ডেটাবেস নিরপেক্ষ এবং Java objects কে সহজে ডেটাবেস টেবিলের সাথে ম্যাপ করে।
  5. Use Lazy Loading: বড় ডেটাসেটের জন্য lazy loading ব্যবহারের মাধ্যমে অবজেক্টগুলোকে শুধুমাত্র যখন প্রয়োজন তখনই লোড করুন।

Hibernate-এ CRUD Operations (Create, Read, Update, Delete) হল ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করার প্রধান উপায়। Hibernate আপনাকে Session ব্যবহার করে অবজেক্টগুলিকে ডেটাবেসে সেভ, রিট্রিভ, আপডেট এবং ডিলিট করতে সহায়ক এবং JPA ব্যবহারকারীদের জন্য একটি আধুনিক ORM সমাধান প্রদান করে। Hibernate এর এই CRUD অপারেশনগুলি Java ডেভেলপারদের জন্য ডেটাবেসের সাথে ম্যানিপুলেশন করার একটি সহজ এবং কার্যকরী পদ্ধতি প্রদান করে।

Content added By

CRUD এর পূর্ণ রূপ এবং ধারণা

143
143

CRUD হল একটি অ্যাক্রোনিম যা Create, Read, Update, এবং Delete এর সংক্ষিপ্ত রূপ। এই চারটি মৌলিক অপারেশন একটি ডেটাবেস বা ডেটা স্টোরেজ সিস্টেমে অবজেক্ট ম্যানিপুলেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ। Hibernate ORM (Object-Relational Mapping) ফ্রেমওয়ার্কের মাধ্যমে এই CRUD অপারেশনগুলি সহজে এবং কার্যকরীভাবে সম্পন্ন করা যায়।

Hibernate-এ, CRUD অপারেশনগুলি Session অবজেক্ট ব্যবহার করে সম্পাদিত হয়, যা ডেটাবেসের সাথে সম্পর্ক স্থাপন করে এবং Java অবজেক্টের মাধ্যমে ডেটা ম্যানিপুলেট করতে সহায়তা করে।


CRUD অপারেশন:

  1. Create:
    • নতুন রেকর্ড তৈরি করতে ব্যবহৃত হয়। Hibernate-এ নতুন অবজেক্ট তৈরি করার জন্য save() বা persist() মেথড ব্যবহার করা হয়।
  2. Read:
    • ডেটাবেস থেকে ডেটা পড়তে ব্যবহৃত হয়। Hibernate-এ ডেটা পড়ার জন্য get(), load(), এবং HQL (Hibernate Query Language) বা Criteria API ব্যবহার করা হয়।
  3. Update:
    • ডেটাবেসে বিদ্যমান রেকর্ড আপডেট করতে ব্যবহৃত হয়। Hibernate-এ update() বা saveOrUpdate() মেথড ব্যবহার করে আপডেট করা হয়।
  4. Delete:
    • ডেটাবেস থেকে রেকর্ড মুছে ফেলার জন্য ব্যবহৃত হয়। Hibernate-এ delete() মেথড ব্যবহার করা হয়।

1. Create (Create Operation)

Hibernate-এ Create অপারেশনটি নতুন অবজেক্ট তৈরি করে ডেটাবেসে সেভ করার প্রক্রিয়া। এটি Session.save() বা Session.persist() মেথড দ্বারা সম্পন্ন করা হয়।

Create Operation Example:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class CreateExample {
    public static void main(String[] args) {
        // Hibernate configuration and session factory setup
        SessionFactory factory = new Configuration()
                                    .configure("hibernate.cfg.xml")
                                    .addAnnotatedClass(Employee.class)
                                    .buildSessionFactory();
        
        // Create a session
        Session session = factory.getCurrentSession();
        
        try {
            // Create new Employee object
            Employee newEmployee = new Employee("John", "Doe", "developer");

            // Start a transaction
            session.beginTransaction();

            // Save the employee object
            session.save(newEmployee);

            // Commit the transaction
            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

এখানে, session.save(newEmployee) মেথডের মাধ্যমে Employee অবজেক্টটি ডেটাবেসে সংরক্ষিত হচ্ছে।


2. Read (Read Operation)

Hibernate-এ Read অপারেশনটি ডেটাবেস থেকে ডেটা পড়তে ব্যবহৃত হয়। এটি session.get() বা session.load() মেথড দ্বারা করা যেতে পারে, অথবা HQL বা Criteria API ব্যবহার করে কুয়েরি চালানো যেতে পারে।

Read Operation Example:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class ReadExample {
    public static void main(String[] args) {
        // Hibernate configuration and session factory setup
        SessionFactory factory = new Configuration()
                                    .configure("hibernate.cfg.xml")
                                    .addAnnotatedClass(Employee.class)
                                    .buildSessionFactory();
        
        // Create a session
        Session session = factory.getCurrentSession();
        
        try {
            // Start a transaction
            session.beginTransaction();
            
            // Retrieve employee based on the id
            Employee employee = session.get(Employee.class, 1);
            
            // Display the employee details
            System.out.println("Employee: " + employee);
            
            // Commit the transaction
            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

এখানে, session.get(Employee.class, 1) মেথডের মাধ্যমে Employee অবজেক্টের ID 1 দ্বারা ডেটাবেস থেকে রেকর্ড পড়া হচ্ছে।


3. Update (Update Operation)

Hibernate-এ Update অপারেশনটি বিদ্যমান রেকর্ড পরিবর্তন করতে ব্যবহৃত হয়। আপনি session.update() অথবা session.saveOrUpdate() মেথড ব্যবহার করতে পারেন।

Update Operation Example:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class UpdateExample {
    public static void main(String[] args) {
        // Hibernate configuration and session factory setup
        SessionFactory factory = new Configuration()
                                    .configure("hibernate.cfg.xml")
                                    .addAnnotatedClass(Employee.class)
                                    .buildSessionFactory();
        
        // Create a session
        Session session = factory.getCurrentSession();
        
        try {
            // Start a transaction
            session.beginTransaction();
            
            // Retrieve employee based on the id
            Employee employee = session.get(Employee.class, 1);
            
            // Update the employee's information
            employee.setFirstName("Jane");
            
            // Commit the transaction
            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

এখানে, employee.setFirstName("Jane") এর মাধ্যমে Employee অবজেক্টের প্রথম নাম পরিবর্তন করা হয়েছে এবং session.getTransaction().commit() দিয়ে এটি ডেটাবেসে আপডেট করা হয়েছে।


4. Delete (Delete Operation)

Hibernate-এ Delete অপারেশনটি ডেটাবেস থেকে একটি রেকর্ড মুছে ফেলার জন্য ব্যবহৃত হয়। session.delete() মেথড ব্যবহার করে এটি করা হয়।

Delete Operation Example:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class DeleteExample {
    public static void main(String[] args) {
        // Hibernate configuration and session factory setup
        SessionFactory factory = new Configuration()
                                    .configure("hibernate.cfg.xml")
                                    .addAnnotatedClass(Employee.class)
                                    .buildSessionFactory();
        
        // Create a session
        Session session = factory.getCurrentSession();
        
        try {
            // Start a transaction
            session.beginTransaction();
            
            // Retrieve employee based on the id
            Employee employee = session.get(Employee.class, 1);
            
            // Delete the employee
            session.delete(employee);
            
            // Commit the transaction
            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

এখানে, session.delete(employee) মেথড ব্যবহার করে Employee অবজেক্টটি ডেটাবেস থেকে মুছে ফেলা হয়েছে।


Hibernate CRUD-এর সুবিধা:

  1. Simplicity: Hibernate এর মাধ্যমে CRUD অপারেশনগুলি অত্যন্ত সহজ এবং কম কোডে করা যায়, কারণ Hibernate SQL লেখার পরিবর্তে Java অবজেক্টের উপর কাজ করে।
  2. Automatic Table Creation: Hibernate আপনাকে Java ক্লাস এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক তৈরি করে দেয়, ফলে টেবিল তৈরি বা আপডেট করার জন্য আপনার SQL কমান্ড লেখার প্রয়োজন পড়ে না।
  3. Database Independence: Hibernate ডেটাবেস নিরপেক্ষ, মানে আপনি SQL কোড পরিবর্তন না করেই ডেটাবেস পরিবর্তন করতে পারেন।
  4. Performance Optimization: Hibernate লেজি লোডিং (Lazy Loading) এবং ক্যাশিং (Caching) ফিচারগুলো দিয়ে পারফরম্যান্স অপটিমাইজেশন সরবরাহ করে, যার ফলে ডেটাবেসের সাথে ইন্টারঅ্যাকশন আরও কার্যকরী হয়।
  5. Transaction Management: Hibernate এর সঙ্গে ট্রানজেকশন ম্যানেজমেন্ট সহজ এবং কার্যকরী, কারণ এটি সমস্ত CRUD অপারেশন ট্রানজেকশনের মাধ্যমে পরিচালনা করে।

Hibernate দিয়ে CRUD অপারেশন পরিচালনা সহজ এবং কার্যকরী হয়। এটি Java অবজেক্টের সাথে ডেটাবেস টেবিলের সংযোগ স্থাপন এবং ডেটা ম্যানিপুলেশনকে অত্যন্ত সহজ করে তোলে। Hibernate এর মাধ্যমে আপনি ডেটাবেসের অপারেশনগুলি স্বয়ংক্রিয়ভাবে এবং মডুলারভাবে পরিচালনা করতে পারেন।

Content added By

Hibernate এর মাধ্যমে Data Insert (Create)

117
117

Hibernate দিয়ে Data Insert (Create) অপারেশন বাস্তবায়ন করা খুবই সহজ এবং কার্যকরী। Hibernate ORM (Object-Relational Mapping) ফ্রেমওয়ার্কের মাধ্যমে আপনি ডাটাবেসে ডেটা ইনসার্ট করতে পারবেন এবং এটি ক্লাস এবং টেবিলের মধ্যে সম্পর্ক তৈরি করবে।

নিচে Hibernate ব্যবহার করে Data Insert (Create) করার জন্য প্রয়োজনীয় ধাপগুলো ব্যাখ্যা করা হয়েছে:


Step 1: Hibernate Configuration ফাইল তৈরি করা (hibernate.cfg.xml)

Hibernate এর কনফিগারেশন ফাইলটি ডাটাবেসের সংযোগ তথ্য, ডায়ালেক্ট, ডাটাবেসের ইউজারনেম এবং পাসওয়ার্ড, হাইবারনেটের সেটিংস ইত্যাদি ধারণ করে।

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

    <session-factory>
        <!-- JDBC Database connection settings -->
        <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
        <property name="hibernate.connection.driver_class">org.h2.Driver</property>
        <property name="hibernate.connection.url">jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</property>
        <property name="hibernate.connection.username">sa</property>
        <property name="hibernate.connection.password"></property>

        <!-- JDBC connection pool settings -->
        <property name="hibernate.c3p0.min_size">5</property>
        <property name="hibernate.c3p0.max_size">20</property>

        <!-- Specify the dialect -->
        <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="hibernate.current_session_context_class">thread</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="hibernate.show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hibernate.hbm2ddl.auto">update</property>

        <!-- Mention annotated class -->
        <mapping class="com.example.hibernate.MyEntity"/>
    </session-factory>

</hibernate-configuration>

এখানে, hibernate.cfg.xml ফাইলে ডাটাবেস কনফিগারেশন সহ Hibernate এর অন্যান্য প্রপার্টি উল্লেখ করা হয়েছে। এখানে <mapping class="com.example.hibernate.MyEntity"/> দ্বারা MyEntity ক্লাসকে টেবিলের সাথে সম্পর্কিত করা হয়েছে।


Step 2: Entity Class তৈরি করা

Hibernate Entity ক্লাসে, @Entity অ্যানোটেশন ব্যবহার করা হয়, যা Hibernate কে জানায় যে এটি একটি জাভা ক্লাস যা একটি ডাটাবেস টেবিলের সাথে সম্পর্কিত।

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;

@Entity
public class MyEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)  // Auto increment ID
    private int id;
    
    private String name;
    
    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

এখানে:

  • @Entity: এই অ্যানোটেশনটি নির্দেশ করে যে MyEntity একটি JPA Entity
  • @Id: এটি টেবিলের প্রাইমারি কী ফিল্ড নির্দেশ করে।
  • @GeneratedValue: এটি প্রাইমারি কী ফিল্ডের জন্য স্বয়ংক্রিয়ভাবে ভ্যালু তৈরি করতে ব্যবহৃত হয়।

Step 3: Hibernate ব্যবহার করে Data Insert (Create) করা

এখন আমরা Session এবং Transaction ব্যবহার করে ডাটাবেসে ডেটা ইনসার্ট করবো। SessionFactory ব্যবহার করে Session তৈরি করা হয়, এবং একটি Transaction চালু করে ডেটা ইনসার্ট করা হয়।

MyDAO Class (Data Insert করার জন্য):

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

public class MyDAO {

    private SessionFactory sessionFactory;

    public MyDAO(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public void saveEntity(MyEntity entity) {
        // Session তৈরি করা
        Session session = sessionFactory.getCurrentSession();
        
        // Transaction শুরু করা
        Transaction transaction = session.beginTransaction();

        try {
            // Entity সেভ করা
            session.save(entity);

            // Transaction কমিট করা
            transaction.commit();
            System.out.println("Entity saved successfully");
        } catch (Exception e) {
            // Exception হলে Rollback করা
            if (transaction != null) {
                transaction.rollback();
            }
            e.printStackTrace();
        }
    }
}

এখানে:

  • session.save(entity) দিয়ে MyEntity অবজেক্টটি ডাটাবেসে সেভ করা হচ্ছে।
  • Transaction ব্যবহারের মাধ্যমে ডাটাবেস অপারেশনগুলি অ্যাটমিকভাবে পরিচালিত হয়। সফল হলে commit() এবং কোনো ত্রুটি ঘটলে rollback() করা হয়।

Step 4: Main Application

এখন, Guice বা সাধারণভাবে Hibernate ব্যবহার করে SessionFactory তৈরি করা এবং MyDAO ব্যবহার করে ডেটা ইনসার্ট করা হবে।

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class MainApp {

    public static void main(String[] args) {
        // SessionFactory তৈরি করা
        SessionFactory sessionFactory = new Configuration().configure().addAnnotatedClass(MyEntity.class).buildSessionFactory();

        // MyDAO ক্লাস ইনস্ট্যান্স তৈরি করা
        MyDAO dao = new MyDAO(sessionFactory);

        // MyEntity অবজেক্ট তৈরি করা এবং সেভ করা
        MyEntity entity = new MyEntity();
        entity.setName("John Doe");

        // ডেটা সেভ করা
        dao.saveEntity(entity);

        // SessionFactory বন্ধ করা
        sessionFactory.close();
    }
}

এখানে, MyEntity অবজেক্টের name প্রপার্টি ইনপুট দেওয়া হয়েছে এবং তা MyDAO ক্লাসের saveEntity() মেথডের মাধ্যমে ডাটাবেসে সেভ করা হয়েছে।


Output:

যদি আপনার hibernate.cfg.xml কনফিগারেশন ফাইলটি ঠিকভাবে কনফিগার করা থাকে, তাহলে Hibernate কনসোলের আউটপুট হিসেবে SQL স্টেটমেন্ট দেখাবে এবং টেবিলের মধ্যে ডেটা ইনসার্ট হবে:

Hibernate: insert into MY_ENTITY (NAME) values (?)
Entity saved successfully

Hibernate ব্যবহার করে Data Insert (Create) অপারেশন করা খুবই সহজ। উপরের স্টেপগুলিতে:

  1. Hibernate Configuration সেটআপ করা।
  2. JPA Annotations ব্যবহার করে Entity Class তৈরি করা।
  3. Session এবং Transaction ব্যবহার করে ডাটাবেসে ডেটা ইনসার্ট করা।

Hibernate ORM ডাটাবেসের সাথে জাভা অবজেক্টগুলির সম্পর্ক সহজে তৈরি করে এবং CRUD (Create, Read, Update, Delete) অপারেশন করতে সহায়ক হয়।

Content added By

Hibernate এর মাধ্যমে Data Read (Retrieve)

132
132

Hibernate ORM (Object-Relational Mapping) ফ্রেমওয়ার্কের মাধ্যমে ডাটাবেস থেকে ডেটা রিট্রিভ (Retrieve) বা পড়ার প্রক্রিয়া খুবই সহজ এবং কার্যকরী। Hibernate ডেটাবেসের সাথে সম্পর্কিত অবজেক্টগুলির মধ্যে ম্যাপিং করে, এবং আপনি বিভিন্ন CRUD (Create, Read, Update, Delete) অপারেশন করতে পারবেন, যেখানে Read অপারেশনটি ডেটা রিট্রিভ করার জন্য ব্যবহৃত হয়।

Hibernate-এ ডেটা রিট্রিভ করার জন্য সাধারণত Session অবজেক্ট ব্যবহার করা হয়, যা ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করে এবং অবজেক্টগুলিকে রিটার্ন করে। এখানে বিভিন্ন পদ্ধতিতে ডেটা রিট্রিভ করার বিস্তারিত আলোচনা করা হলো।


1. Using Session.get() Method

Session.get() মেথড ব্যবহার করে নির্দিষ্ট ID-এর মাধ্যমে একটি অবজেক্ট রিট্রিভ করা যায়। এটি primary key দ্বারা রেকর্ড রিট্রিভ করে।

Example: Retrieving Data using Session.get()

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class RetrieveExample {
    public static void main(String[] args) {

        // Step 1: Create session factory and session
        SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
                .addAnnotatedClass(Employee.class)
                .buildSessionFactory();

        Session session = factory.getCurrentSession();

        try {
            // Step 2: Create a new Employee object
            int employeeId = 1;

            // Step 3: Retrieve the Employee based on the ID
            session.beginTransaction();

            Employee employee = session.get(Employee.class, employeeId);

            // Step 4: Display the retrieved employee
            System.out.println("Retrieved Employee: " + employee);

            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

Explanation:

  • session.get(Employee.class, employeeId): এখানে get() মেথডটি Employee অবজেক্ট রিটার্ন করে, যেখানে employeeId হল primary key। এটি রিট্রিভ করার জন্য ডাটাবেসের টেবিল থেকে সঠিক সারি খুঁজে বের করে।

2. Using Session.createQuery() with HQL (Hibernate Query Language)

Hibernate Query Language (HQL) ব্যবহার করে আরও জটিল কুয়েরি তৈরি করা সম্ভব। HQL SQL-এর মতোই দেখতে, কিন্তু এটি জাভা অবজেক্টগুলির জন্য ডিজাইন করা। createQuery() মেথডের মাধ্যমে আপনি HQL কুয়েরি চালাতে পারেন।

Example: Retrieving Data using HQL

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;

import java.util.List;

public class RetrieveExample {
    public static void main(String[] args) {

        // Step 1: Create session factory and session
        SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
                .addAnnotatedClass(Employee.class)
                .buildSessionFactory();

        Session session = factory.getCurrentSession();

        try {
            // Step 2: Create a HQL query to retrieve all employees
            session.beginTransaction();

            Query<Employee> query = session.createQuery("from Employee", Employee.class);

            // Step 3: Execute the query and get result list
            List<Employee> employees = query.getResultList();

            // Step 4: Display the results
            for (Employee emp : employees) {
                System.out.println(emp);
            }

            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

Explanation:

  • session.createQuery("from Employee", Employee.class): এখানে createQuery() মেথডটি HQL কুয়েরি তৈরি করে যা Employee টেবিলের সমস্ত রেকর্ড রিট্রিভ করবে।
  • query.getResultList(): এটি HQL কুয়েরি চালিয়ে সমস্ত Employee অবজেক্টের লিস্ট রিটার্ন করে।

3. Using Session.createCriteria() (Deprecated in Latest Versions)

Hibernate এর পুরানো ভার্সনে Criteria API ব্যবহার করা হত ডেটা রিট্রিভ করার জন্য। তবে, বর্তমানে Hibernate 5 এবং পরবর্তী ভার্সনগুলিতে Criteria API পুরানো হিসেবে চিহ্নিত হয়েছে এবং এর পরিবর্তে JPA Criteria API ব্যবহৃত হচ্ছে।

Example: Retrieving Data using Criteria (Hibernate 4.x or older)

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.CriteriaQuery;

import java.util.List;

public class RetrieveExample {
    public static void main(String[] args) {

        // Step 1: Create session factory and session
        SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
                .addAnnotatedClass(Employee.class)
                .buildSessionFactory();

        Session session = factory.getCurrentSession();

        try {
            // Step 2: Create a Criteria query to retrieve employees
            session.beginTransaction();

            List<Employee> employees = session.createCriteria(Employee.class).list();

            // Step 3: Display the results
            for (Employee emp : employees) {
                System.out.println(emp);
            }

            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

Explanation:

  • session.createCriteria(Employee.class).list(): এটি Criteria API ব্যবহার করে Employee টেবিলের সব রেকর্ড রিট্রিভ করে।

4. Using Session.createNativeQuery() (SQL Queries)

Hibernate এ native SQL queries ব্যবহার করার মাধ্যমে সরাসরি SQL কুয়েরি চালানো যেতে পারে। এটি Hibernate এর মাধ্যমে ডাটাবেসের সাথে সরাসরি SQL ইন্টারঅ্যাকশন করার জন্য ব্যবহৃত হয়।

Example: Retrieving Data using Native SQL

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.NativeQuery;

import java.util.List;

public class RetrieveExample {
    public static void main(String[] args) {

        // Step 1: Create session factory and session
        SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
                .addAnnotatedClass(Employee.class)
                .buildSessionFactory();

        Session session = factory.getCurrentSession();

        try {
            // Step 2: Create a native SQL query to retrieve employees
            session.beginTransaction();

            String sql = "SELECT * FROM employee";
            NativeQuery<Employee> query = session.createNativeQuery(sql, Employee.class);

            // Step 3: Execute the query and get result list
            List<Employee> employees = query.getResultList();

            // Step 4: Display the results
            for (Employee emp : employees) {
                System.out.println(emp);
            }

            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

Explanation:

  • session.createNativeQuery(sql, Employee.class): এটি native SQL কুয়েরি ব্যবহার করে employee টেবিল থেকে সমস্ত ডেটা রিট্রিভ করে এবং Employee ক্লাসে মাপসই করে।

Hibernate এর মাধ্যমে ডেটা রিট্রিভ করার কয়েকটি পদ্ধতি রয়েছে, যেমন:

  1. Session.get() Method: একটি নির্দিষ্ট primary key দ্বারা অবজেক্ট রিটার্ন করা হয়।
  2. HQL (Hibernate Query Language): SQL এর মতোই দেখতে, তবে এটি জাভা অবজেক্টগুলির জন্য ডিজাইন করা।
  3. Criteria API: Hibernate 4.x এবং পুরানো ভার্সনে ব্যবহৃত, কিন্তু এখন এটি JPA Criteria API দ্বারা প্রতিস্থাপিত হয়েছে।
  4. Native SQL Queries: Hibernate দিয়ে সরাসরি SQL কুয়েরি চালানো সম্ভব।

এই সব পদ্ধতি Hibernate ব্যবহারকারীদের ডেটাবেস থেকে ডেটা রিট্রিভ করার জন্য শক্তিশালী এবং নমনীয় উপায় প্রদান করে।

Content added By

Hibernate এর মাধ্যমে Data Update এবং Delete

110
110

Hibernate হল একটি Java ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক যা Java অবজেক্টগুলোকে ডেটাবেস টেবিলের সাথে ম্যাপ করতে এবং ডেটাবেস অপারেশনগুলোকে সহজ ও কার্যকরভাবে সম্পাদন করতে সাহায্য করে। Hibernate ব্যবহার করে আপনি সহজেই Data Update এবং Data Delete অপারেশনগুলো করতে পারেন।

এখানে, Hibernate এর মাধ্যমে Data Update এবং Data Delete কিভাবে করা যায়, তার উদাহরণসহ বিস্তারিত আলোচনা করা হয়েছে।


1. Data Update in Hibernate

Hibernate-এ Data Update করার জন্য Session এর মাধ্যমে আপনি merge() অথবা update() মেথড ব্যবহার করতে পারেন। সাধারণত, merge() বেশি ব্যবহৃত হয় কারণ এটি ডেটাবেসের সাথে সিনক্রোনাইজ করা হয় এবং এটি যদি কোনো অবজেক্টের পরিবর্তন না হয় তবে নতুন অবজেক্ট হিসেবে যুক্ত করে।

Step-by-Step Example for Data Update:

  1. Entity Class (Student)
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Student {
    @Id
    private int id;
    private String name;
    private String course;

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCourse() {
        return course;
    }

    public void setCourse(String course) {
        this.course = course;
    }
}
  1. Hibernate Utility Class
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    private static SessionFactory sessionFactory;

    static {
        try {
            sessionFactory = new Configuration().configure("hibernate.cfg.xml")
                .addAnnotatedClass(Student.class)
                .buildSessionFactory();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}
  1. Data Update Example
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

public class StudentUpdateApp {
    public static void main(String[] args) {
        // Get the session factory
        SessionFactory factory = HibernateUtil.getSessionFactory();

        // Get the session from session factory
        Session session = factory.getCurrentSession();

        try {
            // Start a transaction
            session.beginTransaction();

            // Retrieve the student based on the id
            int studentId = 1;
            Student student = session.get(Student.class, studentId);

            // Update the student's information
            if (student != null) {
                student.setName("John Doe");
                student.setCourse("Advanced Java");
            }

            // Commit the transaction to update the data
            session.getTransaction().commit();

            System.out.println("Student updated successfully!");

        } finally {
            factory.close();
        }
    }
}

Explanation:

  • session.get(Student.class, studentId): এটি Student অবজেক্টটি ডেটাবেস থেকে এনে দেয় যেটি নির্দিষ্ট studentId দিয়ে চিহ্নিত।
  • Update the data: এরপর, student.setName() এবং student.setCourse() ব্যবহার করে ছাত্রের নাম এবং কোর্স আপডেট করা হয়।
  • session.getTransaction().commit(): এই মেথডটি ট্রানজেকশন কমিট করে, ডেটাবেসে পরিবর্তনগুলি সেভ করা হয়।

Alternative with merge() Method:

session.merge(student);  // It saves or updates the student, if exists.

merge() মেথডটি ডেটাবেসে অবজেক্টের পরিবর্তন সিঙ্ক্রোনাইজ করে এবং সঠিকভাবে আপডেট করে।


2. Data Delete in Hibernate

Hibernate-এ Data Delete করার জন্য delete() মেথড ব্যবহার করা হয়। এটি সেশন থেকে অবজেক্টকে মুছে ফেলে এবং ডেটাবেসে সেই রেকর্ডটি মুছে ফেলা হয়।

Step-by-Step Example for Data Delete:

  1. Entity Class (Student) (Same as before)
  2. Data Delete Example
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

public class StudentDeleteApp {
    public static void main(String[] args) {
        // Get the session factory
        SessionFactory factory = HibernateUtil.getSessionFactory();

        // Get the session from session factory
        Session session = factory.getCurrentSession();

        try {
            // Start a transaction
            session.beginTransaction();

            // Retrieve the student based on the id
            int studentId = 1;
            Student student = session.get(Student.class, studentId);

            // Delete the student if exists
            if (student != null) {
                session.delete(student);
            }

            // Commit the transaction to delete the data
            session.getTransaction().commit();

            System.out.println("Student deleted successfully!");

        } finally {
            factory.close();
        }
    }
}

Explanation:

  • session.get(Student.class, studentId): প্রথমে studentId ব্যবহার করে ডেটাবেস থেকে Student অবজেক্ট রিট্রিভ করা হয়।
  • session.delete(student): এরপর delete() মেথড ব্যবহার করে সেই অবজেক্টটি মুছে ফেলা হয়।
  • session.getTransaction().commit(): টানজেকশন কমিট করে ডেটাবেসে পরিবর্তনটি বাস্তবায়িত হয়।

Alternative: Deleting Data Using HQL (Hibernate Query Language)

Hibernate Query Language (HQL) ব্যবহার করে ডেটা ডিলিট করা যায়:

session.createQuery("delete from Student where id=1").executeUpdate();

এই কোডটি id=1 সহ সমস্ত Student রেকর্ড ডিলিট করবে।


3. Handling Transactions:

Hibernate সেশনগুলির মাধ্যমে Data Update এবং Data Delete অপারেশন পরিচালনা করার সময় Transaction Management খুবই গুরুত্বপূর্ণ। আপনি Transaction এর মাধ্যমে নিশ্চিত করতে পারেন যে, ডেটাবেসে অপারেশনগুলি সঠিকভাবে সম্পন্ন হচ্ছে।

Important Notes about Transactions:

  • Transaction Begin: session.beginTransaction() – এটি ট্রানজেকশন শুরু করে।
  • Transaction Commit: session.getTransaction().commit() – এটি ট্রানজেকশন সম্পন্ন করে এবং ডেটাবেসে পরিবর্তন সংরক্ষণ করে।
  • Transaction Rollback: session.getTransaction().rollback() – যদি কোনো ত্রুটি হয়, তবে এটি ডেটাবেসের পরিবর্তন পূর্বাবস্থায় ফিরিয়ে নিয়ে আসে।

4. Error Handling During Update and Delete:

এখানে try-catch ব্লক ব্যবহৃত হয়েছে যাতে যদি কোনো ত্রুটি ঘটে তবে ট্রানজেকশন rollback করা যায়। যেমন:

try {
    session.beginTransaction();
    
    // Operation: Update/Delete
    
    session.getTransaction().commit();
} catch (Exception e) {
    if (session.getTransaction() != null) {
        session.getTransaction().rollback();  // Rollback in case of error
    }
    e.printStackTrace();
} finally {
    factory.close();
}

Hibernate ব্যবহার করে Data Update এবং Data Delete অপারেশন অত্যন্ত সহজ এবং কার্যকরী। Session ব্যবহার করে আপনি সহজেই ডেটাবেসে Insert, Update, এবং Delete করতে পারেন। merge() এবং delete() মেথডগুলি খুবই শক্তিশালী এবং কার্যকরী। ডেটাবেস ট্রানজেকশন ব্যবস্থাপনা সঠিকভাবে প্রয়োগ করা হয় এবং প্রয়োজন হলে rollback করা যায় যদি কোনো ত্রুটি ঘটে।

Content added By
Promotion